package br.com.cast.notaFiscal.persistencia;

import java.util.Iterator;

import javax.persistence.Query;

import org.springframework.stereotype.Component;

import br.com.cast.notaFiscal.models.NotaFiscal;

@Component
public class NotaFiscalDAO extends DAOBase<NotaFiscal> {
	public NotaFiscalDAO() {
	}

	@SuppressWarnings("unchecked")
	public Iterator<NotaFiscal> consultaPaginada(long inicio, long total) {

		Query query = getEntityManager().createQuery("FROM NotaFiscal n join fetch n.produtos ");

		query.setFirstResult((int) inicio);
		query.setMaxResults((int) total);

		return query.getResultList().iterator();

	}

	public boolean notaJaCadastrada(NotaFiscal notaFiscal) {

		StringBuilder hql = new StringBuilder();

		hql.append("SELECT COUNT(*) as qtd ").append("FROM NotaFiscal ")
				.append("WHERE numero = :numero");

		if (notaFiscal.getId() != null) {// alteração
			// tem que existir um país que não seja ele mesmo
			// com o mesmo nome.
			// esse AND faz com que sejam verificados somente os outros países
			// no fluxo de alteração
			hql.append(" AND id <> :id ");
		}

		Query query = getEntityManager().createQuery(hql.toString());

		query.setParameter("numero", notaFiscal.getNumero());

		if (notaFiscal.getId() != null) {// alteração
			query.setParameter("id", notaFiscal.getId());
		}

		return (long) query.getSingleResult() > 0;
	}

}
